import Vue from "vue";
// 检测是否有权限
// 使用Vue.directive声明自定义指令btn-key
export const buttonPermissions = Vue.directive("hasPromise", {
  /**
   * inserted：被绑定元素插入父节点时调用
   * el：指令所绑定的元素，可以用来直接操作 DOM
   * binding.value：指令的绑定值，例如：v-my-directive="1 + 1" 中，绑定值为 2。
   */
  inserted(el, binding) {
    let buttonKey = binding.value;
    // 代表某个元素需要通过权限验证
    if (buttonKey) {
      let key = checkKey(buttonKey);
      if (!key) {
        //没有权限
        el.remove(); //删除按钮
      }
    } else {
      throw new Error("缺少唯一指令");
    }
  },
});

// 检测传入的元素key是否可以显示
function checkKey(key) {
  // 获取权限数组
  let permissionData = JSON.parse(localStorage.getItem("menuArr"))
    ? JSON.parse(localStorage.getItem("menuArr"))
    : [];

  return filterButton(permissionData, key);
}

// 过滤不显示的路由菜单
function filterButton(arr, key) {
  for (let i = 0; i < arr.length; i++) {
    let item = arr[i];
    if (item.type == "2" && item.iconFlag == key) {
      // 如果找到,则跳出
      return true;
    } else if (item.type == "3" && item.iconFlag == key) {
      return true;
    }

    if (item.childList && item.childList.length) {
      const newArr = filterButton(item.childList, key);
      if (newArr) {
        return true;
      } else {
        filterButton(newArr, key);
      }
    }
  }
  return false;
}
